package cn.tedu.datamanager.serve.ipml;


import cn.tedu.datamanager.ex.ServiceException;
import cn.tedu.datamanager.mapper.ServeMapper;
import cn.tedu.datamanager.pojo.dto.ServeAddNewDTO;
import cn.tedu.datamanager.pojo.entity.Serve;
import cn.tedu.datamanager.pojo.vo.ServeListItemVO;
import cn.tedu.datamanager.serve.IServeService;
import cn.tedu.datamanager.web.ServiceCode;
import lombok.extern.slf4j.Slf4j;

import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.*;

/**
 * 处理项目类别数据的业务实现类
 *
 * @author java@tedu.cn
 * @version 0.0.1
 */
@Slf4j
@Service
public class ServeServiceImpl implements IServeService {
    @Autowired
    ServeMapper serveMapper;

    @Override
    public List<ServeListItemVO> list() {
        log.debug("开始处理【查询项目类别列表】的业务");
        // 调用Mapper查询项目类别列表
        List<ServeListItemVO> list = serveMapper.list();
        // 返回
        return list;
    }




    @Override
    public void delete(long serveId) {
        log.debug("开始处理【删除项目类别】的业务,id={}", serveId);
        //根据id查询项目类别数据
        //判断项目类别是否存在
        ServeListItemVO queryResult = serveMapper.getStandardById(serveId);
        if (queryResult == null) {
            String message = "删除项目类别失败,尝试访问的数据不存在!";
            log.warn(message);
            throw new ServiceException(ServiceCode.ERR_NOT_FOUND, message);
        }
        int rows = serveMapper.delete(serveId);
        if (rows < 1) {
            String message = "删除项目类别失败,服务器忙,请稍后再试!";
            log.warn(message);
            throw new ServiceException(ServiceCode.ERR_DELETE, message);
        }
    }

    @Override
    public int setEnable(Long serveId) {

        log.debug("开始处理【启用项目类别】的业务,serveId={}", serveId);
        ServeListItemVO queryResult = serveMapper.getStandardById(serveId);
        if (queryResult == null) {
            String message = "启用项目类别失败,尝试访问的数据不存在!";
            log.warn(message);
            throw new ServiceException(ServiceCode.ERR_NOT_FOUND, message);
        }

        if (queryResult.getEnable() == 1) {
            String message = "该项目类别已经启用,请勿重复操作!";
            log.warn(message);
            throw new ServiceException(ServiceCode.ERR_NOT_FOUND, message);
        }


        Serve admin = new Serve();
        admin.setServeId(serveId);
        admin.setEnable(1);

        int rows = serveMapper.updateByserveId(admin);
        if(rows != 1){
            String message = "启用项目类别失败,服务器忙,请稍后再试!";
            log.warn(message);
            throw new ServiceException(ServiceCode.ERR_UPDATE,message);
        }
        return rows;
    }

    @Override
    public int setDisable(Long serveId) {
        log.debug("开始处理【停用项目类别】的业务,serveId={}", serveId);
        ServeListItemVO queryResult = serveMapper.getStandardById(serveId);
        if (queryResult == null) {
            String message = "停用项目类别失败,尝试访问的数据不存在!";
            log.warn(message);
            throw new ServiceException(ServiceCode.ERR_NOT_FOUND, message);
        }

        if (queryResult.getEnable() == 0) {
            String message = "该项目类别已经停用,请勿重复操作!";
            log.warn(message);
            throw new ServiceException(ServiceCode.ERR_NOT_FOUND, message);
        }

        Serve admin = new Serve();
        admin.setServeId(serveId);
        admin.setEnable(0);

        int rows = serveMapper.updateByserveId(admin);
        if(rows != 1){
            String message = "停用项目类别失败,服务器忙,请稍后再试!";
            log.warn(message);
            throw new ServiceException(ServiceCode.ERR_UPDATE,message);
        }
        return rows;
    }

    @Override
    public void addNew(ServeAddNewDTO serveAddNewDTO) {
        log.debug("开始处理【添加项目类别】的业务，参数：{}", serveAddNewDTO);

        // 从参数albumAddNewDTO中获取尝试添加的相册名称
        long id = serveAddNewDTO.getServeId();
        // 检查此相册名称是否已经存在：调用Mapper对象的countByName()方法，判断结果是否不为0
        int count = serveMapper.countByServeId(id);
        if (count != 0) {
            // 是：名称已存在，不允许创建，抛出异常
            String message = "添加项目类别失败，尝试添加的项目类别编号已经被占用！";
            log.debug(message);
            throw new ServiceException(ServiceCode.ERR_CONFLICT, message);
        }

        // 从参数albumAddNewDTO中获取尝试添加的相册名称
        String name = serveAddNewDTO.getServeName();
        // 检查此相册名称是否已经存在：调用Mapper对象的countByName()方法，判断结果是否不为0
         count = serveMapper.countByServeName(name);
        if (count != 0) {
            // 是：名称已存在，不允许创建，抛出异常
            String message = "添加项目类别失败，尝试添加的项目类别名称已经被占用！";
            log.debug(message);
            throw new ServiceException(ServiceCode.ERR_CONFLICT, message);
        }

        // 创建Album对象
        Serve album = new Serve();
        // 将参数DTO中的数据复制到Album对象中
        BeanUtils.copyProperties(serveAddNewDTO, album);
        log.debug("即将插入项目类别数据：{}", album);
        // 调用Mapper对象的insert()方法，插入相册数据
        serveMapper.insert(album);
    }


}
